package top.csy8888.ch01;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import top.csy8888.ch01.service.UserService;

/**
 * springboot应用的核心启动类（springboot应用时通过main方法直接启动）
 * 这个类上包含一个@SpringBootApplication注解，它是一个复合注解
 * 这个注解又包含了@Configuration,@ComponentScan,@EnableAutoConfiguration
 * 因此，这个启动类既是一个启动类同时也是一个spring的配置类
 * 还具备扫描的功能以及启用自动配置的功能
 *
 * 注意：springboot默认的扫描路径是从当前启动类所在的包开始扫描（包含所有子包）
 * 也可以通过scanBasePackages属性重新指定扫描的包路径（不建议修改）
 *
 * @EnableAutoConfiguration注解时启用springboot的自动配置功能，
 * 它的作用是通过一个导入选择器将所有自动配置类加载到spring容器中
 * 完成自动化装配
 */
//@SpringBootApplication(scanBasePackages = "")
@SpringBootApplication
public class Ch01Application {

	public static void main(String[] args) {
		//运行springboot应用，run方法运行完成后会返回一个初始化好的IOC容器
		//注意：这个IOC容器会根据当前部署环境而改变
		//在没有集成web环境时初始化的就是一个普通的IOC容器
		//如果集成了web，那么初始化的就是一个WebApplicationContext
		ApplicationContext context = SpringApplication.run(Ch01Application.class, args);

		//获取bean
		UserService service = context.getBean(UserService.class);
		System.out.println(service);
	}

}
